package frpc.boot.properties;

import frpc.boot.manager.ICacheDescriptionManager;
import frpc.manager.SimpleRedisBaskManager;
import lombok.experimental.Accessors;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.StringUtils;

import java.util.*;

/**
 * 类描述:  默认缓存配置
 *
 * @author 王雷
 * @version 1.0.0
 * @date 2022/6/22 0022 上午 10:29
 */
@Slf4j
@Accessors(chain = true)
public class DefaultCacheDescriptionAnnotationConfig extends SimpleRedisBaskManager implements ICacheDescriptionManager {

//    /**
//     * 属性描述：缓存标识
//     *
//     * @date : 2022/8/17 0017 下午 1:26
//     */
//    protected final String cacheKey = "DEFAULT_CACHE_DESCRIPTION_ANNOTATION_CONFIG_";

    /**
     * 功能描述：获取所有描述Key
     *
     * @date : 2022/8/17 0017 上午 9:32
     */
    @Override
    public Set<String> giveCacheKeyToSet() throws Exception {
        return giveCacheDescription().keySet();
    }

    /**
     * 功能描述：获取所有描述Key
     *
     * @date : 2022/8/17 0017 上午 9:32
     */
    @Override
    public List<String> giveCacheKeyToList() throws Exception {
        return new ArrayList<>(giveCacheKeyToSet());
    }

    /**
     * 功能描述：是否存在配置
     *
     * @param key 标识
     * @date : 2022/8/17 0017 上午 9:32
     */
    @Override
    public boolean doesItExist(String key) throws Exception {
//        return giveRedisHashManager().hHasKey(giveCacheMark(), key);
        for (String mapKey : giveCacheKeyToSet()) {
            if (key.contains(mapKey)) {
//                return giveRedisHashManager().hget(giveCacheMark(), mapKey);
                return Boolean.TRUE;
            }
        }
        return Boolean.FALSE;
    }

    /**
     * 功能描述：获取缓存服务标识
     *
     * @date : 2022/8/16 0016 下午 8:25
     */
    @Override
    public String giveCacheMark() throws Exception {
//        return cacheKey + "System";
        return "";
    }

    /**
     * 功能描述：初始化缓存描述
     *
     * @date : 2022/8/16 0016 下午 9:37
     */
    @Override
    public void clearCacheDescription() throws Exception {
        /*giveRedisLocker().autoLockToManager(giveCacheMark(), iRedisManage -> {
            giveRedisHashManager().del(giveCacheMark());
            //Incompatible types: expected not void but the lambda body is a block that is not value-compatible
            return true;
        });*/
    }

    /**
     * 功能描述：获取配置的缓存名称
     *
     * @param key 缓存标识
     * @date : 2022/8/16 0016 下午 8:09
     */
    @Override
    public String keyComparison(String key) throws Exception {
        for (String mapKey : giveCacheKeyToSet()) {
            if (key.contains(mapKey)) {
//                return giveRedisHashManager().hget(giveCacheMark(), mapKey);
                return giveCacheDescription().get(key);
            }
        }
        return null;
    }

    /**
     * 功能描述：获取缓存描述对象
     *
     * @date : 2022/8/17 0017 下午 1:35
     */
    protected Map<String, String> giveCacheDescription() throws Exception {
        return CACHE_CONTAINER;
    }

    /**
     * 功能描述：添加缓存描述
     *
     * @param redisKey     缓存Key名称
     * @param redisMessage 缓存说明
     * @date : 2022/8/16 0016 下午 8:13
     */
    @Override
    public void saveOrUpdateCacheDescribe(String redisKey, String redisMessage) throws Exception {
//        giveRedisHashManager().addValueByKey(giveCacheMark(), redisKey, redisMessage);
        if (StringUtils.isNotEmpty(redisKey) && StringUtils.isNotEmpty(redisMessage)) {
            CACHE_CONTAINER.put(redisKey, redisMessage);
        }
    }

    /**
     * 功能描述：删除缓存描述
     *
     * @param redisKey 缓存Key名称
     * @date : 2022/8/16 0016 下午 8:13
     */
    @Override
    public void removeCacheDescribe(String redisKey) throws Exception {
//        giveRedisHashManager().hdel(giveCacheMark(), redisKey);
        if (StringUtils.isNotEmpty(redisKey)) {
            CACHE_CONTAINER.remove(redisKey);
        }
    }
}
